import {
  USER_LOGIN,
  GET_USER_MENUS,
  GET_USER_INFO,
  USER_LOGOUT,
  GET_ORG_TREE
} from '@/base/types'
import store from '../store/index'
import router from '../router/index'
import {LOGIN_PATH} from '../config'
import {clone} from '../utils/convert'

// 统一请求操作,做权限处理
export function dispatch(type, data = {}) {
  if (!type) {
    const rej = '请求别名不能为空'
    return Promise.reject(rej)
  }

  return store.dispatch(type, {
    data: data
  }).then(res => {
    return Promise.resolve(res)
  }).catch(rej => {
    if (rej.code === 401) {
      router.push(LOGIN_PATH)
    }
    // 这里要处理接口报错
    return Promise.reject(rej)
  })
}

/**
 * 获取用户菜单
 * @returns {Promise<any>}
 */
export function getUserMenus() {
  return dispatch(GET_USER_MENUS)
}

/**
 * 获取组织树结构
 * @returns {Promise<any>}
 */
export function getOrgTree() {
  return dispatch(GET_ORG_TREE)
}

// 获取用户信息
export function getCurrentUser() {
  return Promise.all(
    [dispatch(GET_USER_INFO).then(res => {
      // if (res.themes) {
      // const link = document.createElement('link');
      // link.rel = 'stylesheet';
      // link.type = 'text/css';
      // link.href = `/static/css/theme-${res.themes}.css`;
      // link.dataset.theme = res.themes;
      // document.head.appendChild(link);
      // }
    }), getUserMenus()])
}

export function loginAction(data) {
  return dispatch(USER_LOGIN, data).then(res => {
    return Promise.resolve(res)
  })
}

/**
 * 更新组织树全局状态
 * @param data 新的状态数据
 */
export function updateOrgTreeStore(data) {
  store.commit(GET_ORG_TREE, {
    orgTree: clone(data)
  })
}

/**
 * 用户登出
 * @returns {Promise<any>}
 */
export function logoutAction() {
  return dispatch(USER_LOGOUT)
}
